package mapred.maxAndMin.way1;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class MaxMinReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
    Long max = Long.MIN_VALUE;//设置最大值
    Long min = Long.MAX_VALUE;//设置最小值

    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
        // 从Mapper接收到的唯一的一个k-v，它的特点是：
        // 输入到Mapper的所有数据，都在Value中
        // 转换为：我们要通过一个循环，从数组中查找最大值和最小值
        // 因为只有一个key，所以partitioner只可能是一个，所以reducer只可能是一个
        for (LongWritable val : values) {
            if (val.get() > max) {
                max = val.get();
            }

            if (val.get() < min) {
                min = val.get();
            }
        }

        // 将处理完毕的结果通过Reducer输出到文件中
        context.write(new Text("max"), new LongWritable(max));
        context.write(new Text("min"), new LongWritable(min));
    }


}
